package dados;

import java.io.Serializable;
import java.util.LinkedList;

public class Jogador implements Serializable{

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	private String nome;
	private String password;
	private double pontos;
	private double saldo;
	private String email;
	private LinkedList<Accao> accoes;
	private LinkedList<Registo> historial;
	private boolean superUser;
	
	public Jogador(String email, String nome, String password, double saldo, double pontos, boolean superUser){
		this.email = email;
		this.nome = nome;
		this.password = password;
		this.pontos = pontos;
		this.saldo = saldo;
		this.superUser = superUser;
		accoes = new LinkedList<Accao>();
		historial = new LinkedList<Registo>();
	}

	public Jogador(String nome, String pass) {
		this.nome = nome;
		this.password = pass;
		this.pontos = 0.0;
		this.saldo = 15000.0;
		accoes = new LinkedList<Accao>();
		historial = new LinkedList<Registo>();
	}

	public Jogador(String nome) {
		this.nome = nome;
		this.pontos = 0;
		this.saldo = 10000.0;
		accoes = new LinkedList<Accao>();
		historial = new LinkedList<Registo>();
	}

	public boolean existeAccaoSigla(Accao accaoProcura) {
		for (Accao a : accoes) {
			if (a.getSigla().equals(accaoProcura.getSigla()))
				return true;
		}
		return false;
	}

	public boolean existeQuantidadeAccao(Accao accaoProcura) {
		for (Accao a : accoes) {
			if (a.getQuantidade() == accaoProcura.getQuantidade())
				return true;
		}
		return false;
	}

	public boolean existeAccao(Accao accaoProcura) {
		for (Accao a : accoes) {
			if (a.getSigla().equals(accaoProcura.getSigla())
					&& a.getValorAquisicao() == accaoProcura.getValorAquisicao()
					&& a.getQuantidade() == accaoProcura.getQuantidade())
				return true;
		}
		return false;
	}

	public Accao procuraAccaoPorNome(String nomeAccao) {
		for (Accao a : accoes) {
			if (a.getNome().equals(nomeAccao))
				return a;
		}
		return null;
	}

	public Accao procuraAccaoPorSigla(String siglaAccao) {
		for (Accao a : accoes) {
			if (a.getSigla().equals(siglaAccao))
				return a;
		}
		return null;
	}

	public void apagaLista() {
		accoes.clear();
	}

	public void apagarHistorial() {
		historial.clear();
	}

	public LinkedList<Accao> getAccoes() {
		return accoes;
	}

	public LinkedList<Registo> getHistorial() {
		return historial;
	}

	public void imprimeAccoes() {
		for (Accao a : accoes) {
			System.out.println(a + "\n");
		}
	}

	public void imprimeHistorial() {
		for (Registo r : historial) {
			System.out.println(r + "\n");
		}
	}
	
	public String getEmail() {
		return email;
	}

	public void setEmail(String email) {
		this.email = email;
	}

	public String getNome() {
		return nome;
	}

	public void setNome(String nome) {
		this.nome = nome;
	}

	public String getPassword() {
		return password;
	}

	public void setPassword(String password) {
		this.password = password;
	}

	public double getPontos() {
		return pontos;
	}

	public void setPontos(double pontos) {
		this.pontos = pontos;
	}

	public double getSaldo() {
		return saldo;
	}

	public void setSaldo(double saldo) {
		this.saldo = saldo;
	}

	public boolean isSuperUser() {
		return superUser;
	}

	public void setSuperUser(boolean superUser) {
		this.superUser = superUser;
	}

	public String toString() {
		return "Jogador: " + nome + " saldo: " + saldo + " pontos: " + pontos
				+ " Lista de acc��es: " + "\n" + getAccoes();
	}
}